<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>除了 MySQL，这些数据库你都认识么？ | 鱼皮的编程宝典</title>
    <meta name="generator" content="VuePress 1.9.10">
    <link rel="icon" href="/favicon.ico">
    <script>
        var _hmt = _hmt || [];
        (function() {
          var hm = document.createElement("script");
          hm.src = "https://hm.baidu.com/hm.js?2675818a983a3131404cee835018f016";
          var s = document.getElementsByTagName("script")[0]; 
          s.parentNode.insertBefore(hm, s);
        })();
      </script>
    <meta name="description" content="贴心的编程学习路线，全面的编程知识百科">
    <meta property="article:modified_time" content="2023-11-11T12:17:47.000Z">
    <meta property="og:site_name" content="鱼皮的编程宝典">
    <meta property="og:title" content="除了 MySQL，这些数据库你都认识么？">
    <meta property="og:type" content="article">
    <meta property="og:url" content="https://codefather.cn/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/">
    <meta name="twitter:title" content="除了 MySQL，这些数据库你都认识么？">
    <meta name="twitter:url" content="https://codefather.cn/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/">
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:label1" content="Written by">
    <meta name="twitter:label2" content="Filed under">
    <meta name="twitter:data2" content="程序员, 编程, 计算机">
    <meta property="article:tag" content="程序员">
    <meta name="keywords" content="程序员鱼皮, 编程学习路线, 编程知识百科, Java, 编程导航, 前端, 开发, 编程分享, 项目, IT, 求职, 面经">
    
    <link rel="preload" href="/assets/css/0.styles.40c15e22.css" as="style"><link rel="preload" href="/assets/js/app.12ab4756.js" as="script"><link rel="preload" href="/assets/js/2.fd06b53e.js" as="script"><link rel="preload" href="/assets/js/287.7613e62f.js" as="script"><link rel="prefetch" href="/assets/js/1.17ea1209.js"><link rel="prefetch" href="/assets/js/10.d9532d8f.js"><link rel="prefetch" href="/assets/js/100.064ea126.js"><link rel="prefetch" href="/assets/js/101.d64c5b33.js"><link rel="prefetch" href="/assets/js/102.5e29a62c.js"><link rel="prefetch" href="/assets/js/103.59ad6cd7.js"><link rel="prefetch" href="/assets/js/104.ae4763e8.js"><link rel="prefetch" href="/assets/js/105.2a9124be.js"><link rel="prefetch" href="/assets/js/106.529bca07.js"><link rel="prefetch" href="/assets/js/107.c8671a0d.js"><link rel="prefetch" href="/assets/js/108.55c93c64.js"><link rel="prefetch" href="/assets/js/109.7d1efa54.js"><link rel="prefetch" href="/assets/js/11.2f89b5eb.js"><link rel="prefetch" href="/assets/js/110.0caecbf5.js"><link rel="prefetch" href="/assets/js/111.a2aeae49.js"><link rel="prefetch" href="/assets/js/112.eb7ceda5.js"><link rel="prefetch" href="/assets/js/113.f304408d.js"><link rel="prefetch" href="/assets/js/114.988c637f.js"><link rel="prefetch" href="/assets/js/115.bfdeed31.js"><link rel="prefetch" href="/assets/js/116.a47b8c53.js"><link rel="prefetch" href="/assets/js/117.2e1e8250.js"><link rel="prefetch" href="/assets/js/118.758ce408.js"><link rel="prefetch" href="/assets/js/119.73d9e688.js"><link rel="prefetch" href="/assets/js/12.53aaa509.js"><link rel="prefetch" href="/assets/js/120.202a8b2e.js"><link rel="prefetch" href="/assets/js/121.ca91d59a.js"><link rel="prefetch" href="/assets/js/122.8804c0dd.js"><link rel="prefetch" href="/assets/js/123.ceada225.js"><link rel="prefetch" href="/assets/js/124.4b2718b7.js"><link rel="prefetch" href="/assets/js/125.72134235.js"><link rel="prefetch" href="/assets/js/126.167b162c.js"><link rel="prefetch" href="/assets/js/127.f8139c17.js"><link rel="prefetch" href="/assets/js/128.da64a377.js"><link rel="prefetch" href="/assets/js/129.c07963b1.js"><link rel="prefetch" href="/assets/js/13.52940164.js"><link rel="prefetch" href="/assets/js/130.f66fc8bb.js"><link rel="prefetch" href="/assets/js/131.a913c7dd.js"><link rel="prefetch" href="/assets/js/132.ea648654.js"><link rel="prefetch" href="/assets/js/133.074ca70e.js"><link rel="prefetch" href="/assets/js/134.dc79ddd8.js"><link rel="prefetch" href="/assets/js/135.c4516208.js"><link rel="prefetch" href="/assets/js/136.2546baf7.js"><link rel="prefetch" href="/assets/js/137.56454fc6.js"><link rel="prefetch" href="/assets/js/138.bdb002bf.js"><link rel="prefetch" href="/assets/js/139.40a2f9b5.js"><link rel="prefetch" href="/assets/js/14.ade1e74d.js"><link rel="prefetch" href="/assets/js/140.06b20427.js"><link rel="prefetch" href="/assets/js/141.8dd992e3.js"><link rel="prefetch" href="/assets/js/142.d9305485.js"><link rel="prefetch" href="/assets/js/143.41bf907e.js"><link rel="prefetch" href="/assets/js/144.c138960c.js"><link rel="prefetch" href="/assets/js/145.fc5b38c8.js"><link rel="prefetch" href="/assets/js/146.c9166b70.js"><link rel="prefetch" href="/assets/js/147.c31d8a01.js"><link rel="prefetch" href="/assets/js/148.5c0534ca.js"><link rel="prefetch" href="/assets/js/149.d2355ea2.js"><link rel="prefetch" href="/assets/js/15.970a8ca5.js"><link rel="prefetch" href="/assets/js/150.c1644898.js"><link rel="prefetch" href="/assets/js/151.b6e4adf0.js"><link rel="prefetch" href="/assets/js/152.7a5071aa.js"><link rel="prefetch" href="/assets/js/153.31abbc68.js"><link rel="prefetch" href="/assets/js/154.9c6bb079.js"><link rel="prefetch" href="/assets/js/155.e5506a40.js"><link rel="prefetch" href="/assets/js/156.992dab50.js"><link rel="prefetch" href="/assets/js/157.12a6ee84.js"><link rel="prefetch" href="/assets/js/158.84dc1045.js"><link rel="prefetch" href="/assets/js/159.fd2022b1.js"><link rel="prefetch" href="/assets/js/16.ff971500.js"><link rel="prefetch" href="/assets/js/160.8d8889cd.js"><link rel="prefetch" href="/assets/js/161.31797def.js"><link rel="prefetch" href="/assets/js/162.bfae7a75.js"><link rel="prefetch" href="/assets/js/163.e5e8094d.js"><link rel="prefetch" href="/assets/js/164.870f212c.js"><link rel="prefetch" href="/assets/js/165.8da20a31.js"><link rel="prefetch" href="/assets/js/166.950a187d.js"><link rel="prefetch" href="/assets/js/167.fd042c52.js"><link rel="prefetch" href="/assets/js/168.7d9f058d.js"><link rel="prefetch" href="/assets/js/169.205df80e.js"><link rel="prefetch" href="/assets/js/17.4b045b26.js"><link rel="prefetch" href="/assets/js/170.270108a3.js"><link rel="prefetch" href="/assets/js/171.9f03d27d.js"><link rel="prefetch" href="/assets/js/172.1882bac7.js"><link rel="prefetch" href="/assets/js/173.fc1fe7d4.js"><link rel="prefetch" href="/assets/js/174.d77c927b.js"><link rel="prefetch" href="/assets/js/175.019b9e83.js"><link rel="prefetch" href="/assets/js/176.5ce31bd8.js"><link rel="prefetch" href="/assets/js/177.9a2006f2.js"><link rel="prefetch" href="/assets/js/178.88265ac1.js"><link rel="prefetch" href="/assets/js/179.3205ce07.js"><link rel="prefetch" href="/assets/js/18.1cdd0514.js"><link rel="prefetch" href="/assets/js/180.2ff51f44.js"><link rel="prefetch" href="/assets/js/181.f792ce97.js"><link rel="prefetch" href="/assets/js/182.103328e1.js"><link rel="prefetch" href="/assets/js/183.40fde303.js"><link rel="prefetch" href="/assets/js/184.1f36ac78.js"><link rel="prefetch" href="/assets/js/185.cf3b1c00.js"><link rel="prefetch" href="/assets/js/186.f7981399.js"><link rel="prefetch" href="/assets/js/187.20fe296d.js"><link rel="prefetch" href="/assets/js/188.7b004fea.js"><link rel="prefetch" href="/assets/js/189.599ca2d9.js"><link rel="prefetch" href="/assets/js/19.5740e4d6.js"><link rel="prefetch" href="/assets/js/190.14087c07.js"><link rel="prefetch" href="/assets/js/191.b0f73f6d.js"><link rel="prefetch" href="/assets/js/192.9d171669.js"><link rel="prefetch" href="/assets/js/193.00975585.js"><link rel="prefetch" href="/assets/js/194.2c7c43b4.js"><link rel="prefetch" href="/assets/js/195.ff126254.js"><link rel="prefetch" href="/assets/js/196.6546ae1c.js"><link rel="prefetch" href="/assets/js/197.eedb67bb.js"><link rel="prefetch" href="/assets/js/198.acdcc22c.js"><link rel="prefetch" href="/assets/js/199.7993a6b2.js"><link rel="prefetch" href="/assets/js/20.8885a4fa.js"><link rel="prefetch" href="/assets/js/200.52f08765.js"><link rel="prefetch" href="/assets/js/201.b85ab10b.js"><link rel="prefetch" href="/assets/js/202.ccec1c85.js"><link rel="prefetch" href="/assets/js/203.3f50a6ed.js"><link rel="prefetch" href="/assets/js/204.f28b803b.js"><link rel="prefetch" href="/assets/js/205.c51c53fd.js"><link rel="prefetch" href="/assets/js/206.ba0aa8f6.js"><link rel="prefetch" href="/assets/js/207.0dce311a.js"><link rel="prefetch" href="/assets/js/208.0ea629a6.js"><link rel="prefetch" href="/assets/js/209.f48c3e71.js"><link rel="prefetch" href="/assets/js/21.0bb62db4.js"><link rel="prefetch" href="/assets/js/210.689db8f2.js"><link rel="prefetch" href="/assets/js/211.72bc0f1f.js"><link rel="prefetch" href="/assets/js/212.456135bd.js"><link rel="prefetch" href="/assets/js/213.d0ea50fc.js"><link rel="prefetch" href="/assets/js/214.1400da91.js"><link rel="prefetch" href="/assets/js/215.aeef3e5d.js"><link rel="prefetch" href="/assets/js/216.a60215af.js"><link rel="prefetch" href="/assets/js/217.d6cd8b69.js"><link rel="prefetch" href="/assets/js/218.1bd500fc.js"><link rel="prefetch" href="/assets/js/219.20faf611.js"><link rel="prefetch" href="/assets/js/22.3e8347a6.js"><link rel="prefetch" href="/assets/js/220.6714179b.js"><link rel="prefetch" href="/assets/js/221.fb5b643d.js"><link rel="prefetch" href="/assets/js/222.d96272e5.js"><link rel="prefetch" href="/assets/js/223.4cb7dc3d.js"><link rel="prefetch" href="/assets/js/224.500d94cc.js"><link rel="prefetch" href="/assets/js/225.d006c34e.js"><link rel="prefetch" href="/assets/js/226.73612150.js"><link rel="prefetch" href="/assets/js/227.b02db9d1.js"><link rel="prefetch" href="/assets/js/228.aad43ff2.js"><link rel="prefetch" href="/assets/js/229.65340802.js"><link rel="prefetch" href="/assets/js/23.ceb5a5ff.js"><link rel="prefetch" href="/assets/js/230.97cab104.js"><link rel="prefetch" href="/assets/js/231.8415349a.js"><link rel="prefetch" href="/assets/js/232.db6d2697.js"><link rel="prefetch" href="/assets/js/233.723d05b1.js"><link rel="prefetch" href="/assets/js/234.26ed5e94.js"><link rel="prefetch" href="/assets/js/235.a586122b.js"><link rel="prefetch" href="/assets/js/236.f802bda8.js"><link rel="prefetch" href="/assets/js/237.cc8767ad.js"><link rel="prefetch" href="/assets/js/238.6485459e.js"><link rel="prefetch" href="/assets/js/239.9fbf3a55.js"><link rel="prefetch" href="/assets/js/24.07267ac6.js"><link rel="prefetch" href="/assets/js/240.1188f244.js"><link rel="prefetch" href="/assets/js/241.cbfb154d.js"><link rel="prefetch" href="/assets/js/242.352cea5a.js"><link rel="prefetch" href="/assets/js/243.07947e1c.js"><link rel="prefetch" href="/assets/js/244.f5b26fa9.js"><link rel="prefetch" href="/assets/js/245.c6030e32.js"><link rel="prefetch" href="/assets/js/246.d3fe99f7.js"><link rel="prefetch" href="/assets/js/247.185ae95d.js"><link rel="prefetch" href="/assets/js/248.a5f1548c.js"><link rel="prefetch" href="/assets/js/249.19691113.js"><link rel="prefetch" href="/assets/js/25.15e1f641.js"><link rel="prefetch" href="/assets/js/250.72fa1d33.js"><link rel="prefetch" href="/assets/js/251.bedd56f7.js"><link rel="prefetch" href="/assets/js/252.32bbcc8b.js"><link rel="prefetch" href="/assets/js/253.b59e5846.js"><link rel="prefetch" href="/assets/js/254.c0e37e1a.js"><link rel="prefetch" href="/assets/js/255.850da3cc.js"><link rel="prefetch" href="/assets/js/256.952d9817.js"><link rel="prefetch" href="/assets/js/257.88667bb8.js"><link rel="prefetch" href="/assets/js/258.c5873c28.js"><link rel="prefetch" href="/assets/js/259.6ae1dcbc.js"><link rel="prefetch" href="/assets/js/26.35b2bbdc.js"><link rel="prefetch" href="/assets/js/260.cb940cc3.js"><link rel="prefetch" href="/assets/js/261.0686c3e9.js"><link rel="prefetch" href="/assets/js/262.d0719839.js"><link rel="prefetch" href="/assets/js/263.ae83ebc1.js"><link rel="prefetch" href="/assets/js/264.209ad8a3.js"><link rel="prefetch" href="/assets/js/265.be8d1ee8.js"><link rel="prefetch" href="/assets/js/266.c51bceaa.js"><link rel="prefetch" href="/assets/js/267.fe8af48a.js"><link rel="prefetch" href="/assets/js/268.e18ed861.js"><link rel="prefetch" href="/assets/js/269.7126031e.js"><link rel="prefetch" href="/assets/js/27.270fcb06.js"><link rel="prefetch" href="/assets/js/270.89ead106.js"><link rel="prefetch" href="/assets/js/271.0643d07a.js"><link rel="prefetch" href="/assets/js/272.32a8e4b0.js"><link rel="prefetch" href="/assets/js/273.9881da47.js"><link rel="prefetch" href="/assets/js/274.2de022ea.js"><link rel="prefetch" href="/assets/js/275.d9a4fe99.js"><link rel="prefetch" href="/assets/js/276.d33de2e9.js"><link rel="prefetch" href="/assets/js/277.1ec367ab.js"><link rel="prefetch" href="/assets/js/278.66ab7c11.js"><link rel="prefetch" href="/assets/js/279.ff51cd15.js"><link rel="prefetch" href="/assets/js/28.ef3f6db2.js"><link rel="prefetch" href="/assets/js/280.ef45ed5f.js"><link rel="prefetch" href="/assets/js/281.87f26b81.js"><link rel="prefetch" href="/assets/js/282.c8ef594b.js"><link rel="prefetch" href="/assets/js/283.15643091.js"><link rel="prefetch" href="/assets/js/284.c4f25b2e.js"><link rel="prefetch" href="/assets/js/285.2d16e4b6.js"><link rel="prefetch" href="/assets/js/286.44eba266.js"><link rel="prefetch" href="/assets/js/288.b9546d55.js"><link rel="prefetch" href="/assets/js/289.125f85d8.js"><link rel="prefetch" href="/assets/js/29.177558be.js"><link rel="prefetch" href="/assets/js/290.db375797.js"><link rel="prefetch" href="/assets/js/291.90946626.js"><link rel="prefetch" href="/assets/js/292.a4524678.js"><link rel="prefetch" href="/assets/js/293.3ed9b083.js"><link rel="prefetch" href="/assets/js/294.d6c14116.js"><link rel="prefetch" href="/assets/js/295.2b485032.js"><link rel="prefetch" href="/assets/js/296.29d9aa0f.js"><link rel="prefetch" href="/assets/js/297.bfd72435.js"><link rel="prefetch" href="/assets/js/298.fc056989.js"><link rel="prefetch" href="/assets/js/299.0a3f258e.js"><link rel="prefetch" href="/assets/js/3.4dc033c7.js"><link rel="prefetch" href="/assets/js/30.248a229d.js"><link rel="prefetch" href="/assets/js/300.d064d776.js"><link rel="prefetch" href="/assets/js/301.d95b9fc0.js"><link rel="prefetch" href="/assets/js/302.1afa637a.js"><link rel="prefetch" href="/assets/js/303.231beaa8.js"><link rel="prefetch" href="/assets/js/304.05df35d9.js"><link rel="prefetch" href="/assets/js/305.f2d83cf9.js"><link rel="prefetch" href="/assets/js/306.d54f5e5e.js"><link rel="prefetch" href="/assets/js/307.d5df9000.js"><link rel="prefetch" href="/assets/js/308.ef2f52b3.js"><link rel="prefetch" href="/assets/js/309.d1f13319.js"><link rel="prefetch" href="/assets/js/31.32a62b91.js"><link rel="prefetch" href="/assets/js/310.30b84be3.js"><link rel="prefetch" href="/assets/js/311.d79e3145.js"><link rel="prefetch" href="/assets/js/312.58e24f19.js"><link rel="prefetch" href="/assets/js/313.9809a122.js"><link rel="prefetch" href="/assets/js/314.e92e41b1.js"><link rel="prefetch" href="/assets/js/315.8c2fc1d4.js"><link rel="prefetch" href="/assets/js/316.a0904343.js"><link rel="prefetch" href="/assets/js/317.18e42b54.js"><link rel="prefetch" href="/assets/js/318.6b051d27.js"><link rel="prefetch" href="/assets/js/319.513b0197.js"><link rel="prefetch" href="/assets/js/32.23b75afc.js"><link rel="prefetch" href="/assets/js/320.ae91bc36.js"><link rel="prefetch" href="/assets/js/321.a194efea.js"><link rel="prefetch" href="/assets/js/322.8273020e.js"><link rel="prefetch" href="/assets/js/323.d332e08f.js"><link rel="prefetch" href="/assets/js/324.ed867b64.js"><link rel="prefetch" href="/assets/js/325.c43ccf9a.js"><link rel="prefetch" href="/assets/js/326.9497d879.js"><link rel="prefetch" href="/assets/js/327.7f095e40.js"><link rel="prefetch" href="/assets/js/328.cb5c5847.js"><link rel="prefetch" href="/assets/js/329.d36b59f3.js"><link rel="prefetch" href="/assets/js/33.b258b779.js"><link rel="prefetch" href="/assets/js/330.b1a092b9.js"><link rel="prefetch" href="/assets/js/331.ff86566f.js"><link rel="prefetch" href="/assets/js/332.0daafa9f.js"><link rel="prefetch" href="/assets/js/333.b7e50524.js"><link rel="prefetch" href="/assets/js/334.7dcf9f0b.js"><link rel="prefetch" href="/assets/js/335.862c410a.js"><link rel="prefetch" href="/assets/js/336.c6384990.js"><link rel="prefetch" href="/assets/js/337.ab9d5e52.js"><link rel="prefetch" href="/assets/js/338.598ae59e.js"><link rel="prefetch" href="/assets/js/339.9b810ff8.js"><link rel="prefetch" href="/assets/js/34.3bd60f1f.js"><link rel="prefetch" href="/assets/js/340.5609a53c.js"><link rel="prefetch" href="/assets/js/341.969d335a.js"><link rel="prefetch" href="/assets/js/342.43f85dba.js"><link rel="prefetch" href="/assets/js/343.47280ef9.js"><link rel="prefetch" href="/assets/js/344.346ae5fc.js"><link rel="prefetch" href="/assets/js/345.32166361.js"><link rel="prefetch" href="/assets/js/346.86ff128b.js"><link rel="prefetch" href="/assets/js/347.3c5421fe.js"><link rel="prefetch" href="/assets/js/348.95910300.js"><link rel="prefetch" href="/assets/js/349.004158d8.js"><link rel="prefetch" href="/assets/js/35.18e8f66a.js"><link rel="prefetch" href="/assets/js/350.e10b195b.js"><link rel="prefetch" href="/assets/js/351.12f89875.js"><link rel="prefetch" href="/assets/js/352.83957394.js"><link rel="prefetch" href="/assets/js/353.475971b9.js"><link rel="prefetch" href="/assets/js/354.8af7b26b.js"><link rel="prefetch" href="/assets/js/355.85925e24.js"><link rel="prefetch" href="/assets/js/356.1d77cf9c.js"><link rel="prefetch" href="/assets/js/357.b467d481.js"><link rel="prefetch" href="/assets/js/358.ac96f32d.js"><link rel="prefetch" href="/assets/js/359.e048bd10.js"><link rel="prefetch" href="/assets/js/36.a7ae257c.js"><link rel="prefetch" href="/assets/js/360.e9b45545.js"><link rel="prefetch" href="/assets/js/361.ad1bb45b.js"><link rel="prefetch" href="/assets/js/362.4e24a30b.js"><link rel="prefetch" href="/assets/js/363.64f7dad5.js"><link rel="prefetch" href="/assets/js/364.d9e3ebc2.js"><link rel="prefetch" href="/assets/js/365.330e3086.js"><link rel="prefetch" href="/assets/js/366.a6c0afb3.js"><link rel="prefetch" href="/assets/js/367.ffcefa40.js"><link rel="prefetch" href="/assets/js/368.664c8e4d.js"><link rel="prefetch" href="/assets/js/369.67da2dd2.js"><link rel="prefetch" href="/assets/js/37.d709f9a9.js"><link rel="prefetch" href="/assets/js/370.b1791970.js"><link rel="prefetch" href="/assets/js/371.743a461a.js"><link rel="prefetch" href="/assets/js/372.7703ef1b.js"><link rel="prefetch" href="/assets/js/373.17de31f6.js"><link rel="prefetch" href="/assets/js/374.e508be9e.js"><link rel="prefetch" href="/assets/js/375.6e2e9fe3.js"><link rel="prefetch" href="/assets/js/376.8ca3511a.js"><link rel="prefetch" href="/assets/js/377.bfcee39c.js"><link rel="prefetch" href="/assets/js/378.21852b78.js"><link rel="prefetch" href="/assets/js/379.9649c307.js"><link rel="prefetch" href="/assets/js/38.68ca920e.js"><link rel="prefetch" href="/assets/js/380.dadb4418.js"><link rel="prefetch" href="/assets/js/381.a03c993d.js"><link rel="prefetch" href="/assets/js/382.bb7c22c1.js"><link rel="prefetch" href="/assets/js/383.bd68b2e5.js"><link rel="prefetch" href="/assets/js/384.f6dc7457.js"><link rel="prefetch" href="/assets/js/385.14287a91.js"><link rel="prefetch" href="/assets/js/386.a6284ac2.js"><link rel="prefetch" href="/assets/js/387.c51f147a.js"><link rel="prefetch" href="/assets/js/388.06d9651e.js"><link rel="prefetch" href="/assets/js/389.2d85d927.js"><link rel="prefetch" href="/assets/js/39.de850db9.js"><link rel="prefetch" href="/assets/js/390.2397b3e0.js"><link rel="prefetch" href="/assets/js/391.8413aaaf.js"><link rel="prefetch" href="/assets/js/392.00eecaa4.js"><link rel="prefetch" href="/assets/js/393.351dd3fd.js"><link rel="prefetch" href="/assets/js/394.d2cc4a70.js"><link rel="prefetch" href="/assets/js/395.abee64bf.js"><link rel="prefetch" href="/assets/js/396.bc265e6a.js"><link rel="prefetch" href="/assets/js/397.e4a96944.js"><link rel="prefetch" href="/assets/js/398.f0d26b29.js"><link rel="prefetch" href="/assets/js/399.e77c3ddc.js"><link rel="prefetch" href="/assets/js/4.2f502b73.js"><link rel="prefetch" href="/assets/js/40.91635261.js"><link rel="prefetch" href="/assets/js/400.c7eac401.js"><link rel="prefetch" href="/assets/js/401.06092d16.js"><link rel="prefetch" href="/assets/js/402.4e08e496.js"><link rel="prefetch" href="/assets/js/403.deba4c77.js"><link rel="prefetch" href="/assets/js/404.9100e4df.js"><link rel="prefetch" href="/assets/js/405.e9f451e2.js"><link rel="prefetch" href="/assets/js/406.a0da4aa4.js"><link rel="prefetch" href="/assets/js/407.58b2b123.js"><link rel="prefetch" href="/assets/js/408.eb2cde2d.js"><link rel="prefetch" href="/assets/js/409.9041f749.js"><link rel="prefetch" href="/assets/js/41.169a3cfc.js"><link rel="prefetch" href="/assets/js/410.c12f3710.js"><link rel="prefetch" href="/assets/js/411.452cda45.js"><link rel="prefetch" href="/assets/js/412.8691317a.js"><link rel="prefetch" href="/assets/js/413.25a68f21.js"><link rel="prefetch" href="/assets/js/414.7a9699d8.js"><link rel="prefetch" href="/assets/js/415.6e8cdaff.js"><link rel="prefetch" href="/assets/js/416.e8a86529.js"><link rel="prefetch" href="/assets/js/417.28330bde.js"><link rel="prefetch" href="/assets/js/418.2fed8e17.js"><link rel="prefetch" href="/assets/js/419.773032f4.js"><link rel="prefetch" href="/assets/js/42.e17cd061.js"><link rel="prefetch" href="/assets/js/420.56681228.js"><link rel="prefetch" href="/assets/js/421.0d170e13.js"><link rel="prefetch" href="/assets/js/422.fc8c2a11.js"><link rel="prefetch" href="/assets/js/423.e34ea6a6.js"><link rel="prefetch" href="/assets/js/424.20fe8748.js"><link rel="prefetch" href="/assets/js/425.f001b7cd.js"><link rel="prefetch" href="/assets/js/426.a91230ef.js"><link rel="prefetch" href="/assets/js/427.c6c9fe8d.js"><link rel="prefetch" href="/assets/js/428.9d4f5e41.js"><link rel="prefetch" href="/assets/js/429.c81cfd3f.js"><link rel="prefetch" href="/assets/js/43.f88aa667.js"><link rel="prefetch" href="/assets/js/430.eb61372f.js"><link rel="prefetch" href="/assets/js/431.4a25365a.js"><link rel="prefetch" href="/assets/js/432.42fc1bbe.js"><link rel="prefetch" href="/assets/js/433.8e9ac9f0.js"><link rel="prefetch" href="/assets/js/434.fdd0b160.js"><link rel="prefetch" href="/assets/js/435.d6cbac31.js"><link rel="prefetch" href="/assets/js/436.17750ba2.js"><link rel="prefetch" href="/assets/js/437.a1468099.js"><link rel="prefetch" href="/assets/js/438.ac6a45c2.js"><link rel="prefetch" href="/assets/js/439.242ae27a.js"><link rel="prefetch" href="/assets/js/44.3f36e228.js"><link rel="prefetch" href="/assets/js/440.b80b520c.js"><link rel="prefetch" href="/assets/js/441.e51a4bbb.js"><link rel="prefetch" href="/assets/js/442.ab0b3eda.js"><link rel="prefetch" href="/assets/js/443.47e44250.js"><link rel="prefetch" href="/assets/js/444.54c3b425.js"><link rel="prefetch" href="/assets/js/445.e006c12e.js"><link rel="prefetch" href="/assets/js/446.f2b79730.js"><link rel="prefetch" href="/assets/js/447.2509a397.js"><link rel="prefetch" href="/assets/js/448.b7d69dfc.js"><link rel="prefetch" href="/assets/js/449.8a575d9b.js"><link rel="prefetch" href="/assets/js/45.be1455b1.js"><link rel="prefetch" href="/assets/js/450.ad421aeb.js"><link rel="prefetch" href="/assets/js/451.f09912ae.js"><link rel="prefetch" href="/assets/js/452.f528c4ce.js"><link rel="prefetch" href="/assets/js/453.fc4dc0f9.js"><link rel="prefetch" href="/assets/js/454.733c315c.js"><link rel="prefetch" href="/assets/js/455.44fe35b1.js"><link rel="prefetch" href="/assets/js/456.7f650035.js"><link rel="prefetch" href="/assets/js/457.77ebc183.js"><link rel="prefetch" href="/assets/js/458.133078f4.js"><link rel="prefetch" href="/assets/js/459.33728b5e.js"><link rel="prefetch" href="/assets/js/46.5ad74cb5.js"><link rel="prefetch" href="/assets/js/460.6946f564.js"><link rel="prefetch" href="/assets/js/461.6f906c5c.js"><link rel="prefetch" href="/assets/js/462.26eca27e.js"><link rel="prefetch" href="/assets/js/463.e02e5f65.js"><link rel="prefetch" href="/assets/js/464.0df25c63.js"><link rel="prefetch" href="/assets/js/465.80cd249e.js"><link rel="prefetch" href="/assets/js/466.a0921e86.js"><link rel="prefetch" href="/assets/js/467.1bec2b47.js"><link rel="prefetch" href="/assets/js/468.b6fa37c1.js"><link rel="prefetch" href="/assets/js/469.a1d2487e.js"><link rel="prefetch" href="/assets/js/47.03df5d0a.js"><link rel="prefetch" href="/assets/js/470.36a4b9c8.js"><link rel="prefetch" href="/assets/js/471.28895273.js"><link rel="prefetch" href="/assets/js/472.b9fe392f.js"><link rel="prefetch" href="/assets/js/473.a2835d9c.js"><link rel="prefetch" href="/assets/js/474.cd57b37d.js"><link rel="prefetch" href="/assets/js/475.8d5a9792.js"><link rel="prefetch" href="/assets/js/476.f7f3781c.js"><link rel="prefetch" href="/assets/js/477.9b710b04.js"><link rel="prefetch" href="/assets/js/478.46d66687.js"><link rel="prefetch" href="/assets/js/479.e7444705.js"><link rel="prefetch" href="/assets/js/48.48f286ba.js"><link rel="prefetch" href="/assets/js/480.da2b750a.js"><link rel="prefetch" href="/assets/js/481.838a8e04.js"><link rel="prefetch" href="/assets/js/482.02bf8041.js"><link rel="prefetch" href="/assets/js/483.bb29ef2f.js"><link rel="prefetch" href="/assets/js/484.aebb68bd.js"><link rel="prefetch" href="/assets/js/485.a66ab41b.js"><link rel="prefetch" href="/assets/js/486.8df516fb.js"><link rel="prefetch" href="/assets/js/487.86d28130.js"><link rel="prefetch" href="/assets/js/488.0863da70.js"><link rel="prefetch" href="/assets/js/489.5d4d9e88.js"><link rel="prefetch" href="/assets/js/49.1ca52d11.js"><link rel="prefetch" href="/assets/js/490.3fd65d85.js"><link rel="prefetch" href="/assets/js/491.ae3a2f87.js"><link rel="prefetch" href="/assets/js/492.6f54679b.js"><link rel="prefetch" href="/assets/js/493.a594b1f4.js"><link rel="prefetch" href="/assets/js/494.4f03fae1.js"><link rel="prefetch" href="/assets/js/495.ae50b66b.js"><link rel="prefetch" href="/assets/js/496.bc92d835.js"><link rel="prefetch" href="/assets/js/497.eac65251.js"><link rel="prefetch" href="/assets/js/498.1d726726.js"><link rel="prefetch" href="/assets/js/499.01e4f7d1.js"><link rel="prefetch" href="/assets/js/5.7b1f056c.js"><link rel="prefetch" href="/assets/js/50.73732fe2.js"><link rel="prefetch" href="/assets/js/500.062ade4e.js"><link rel="prefetch" href="/assets/js/501.e6a711dc.js"><link rel="prefetch" href="/assets/js/502.c79e28e2.js"><link rel="prefetch" href="/assets/js/503.bf97bce9.js"><link rel="prefetch" href="/assets/js/504.b2784ef0.js"><link rel="prefetch" href="/assets/js/505.0767ba54.js"><link rel="prefetch" href="/assets/js/506.8ae14637.js"><link rel="prefetch" href="/assets/js/507.003e2349.js"><link rel="prefetch" href="/assets/js/508.ecb5e6bd.js"><link rel="prefetch" href="/assets/js/509.b644f44a.js"><link rel="prefetch" href="/assets/js/51.bed7cf61.js"><link rel="prefetch" href="/assets/js/510.b660946f.js"><link rel="prefetch" href="/assets/js/511.cb186c8f.js"><link rel="prefetch" href="/assets/js/512.d176170f.js"><link rel="prefetch" href="/assets/js/513.18a1afa5.js"><link rel="prefetch" href="/assets/js/514.4a33e931.js"><link rel="prefetch" href="/assets/js/515.8496bd4d.js"><link rel="prefetch" href="/assets/js/516.529b9476.js"><link rel="prefetch" href="/assets/js/517.289738f1.js"><link rel="prefetch" href="/assets/js/518.eda39556.js"><link rel="prefetch" href="/assets/js/519.85b42de5.js"><link rel="prefetch" href="/assets/js/52.22a7da62.js"><link rel="prefetch" href="/assets/js/520.8b531775.js"><link rel="prefetch" href="/assets/js/521.8e4b66fb.js"><link rel="prefetch" href="/assets/js/522.050bfc55.js"><link rel="prefetch" href="/assets/js/523.e973f1e0.js"><link rel="prefetch" href="/assets/js/524.fd160738.js"><link rel="prefetch" href="/assets/js/525.5a4bc307.js"><link rel="prefetch" href="/assets/js/526.361bc4fa.js"><link rel="prefetch" href="/assets/js/527.06ee9d73.js"><link rel="prefetch" href="/assets/js/528.22d9b118.js"><link rel="prefetch" href="/assets/js/529.b7592c16.js"><link rel="prefetch" href="/assets/js/53.767f3bbf.js"><link rel="prefetch" href="/assets/js/530.ad96d564.js"><link rel="prefetch" href="/assets/js/531.61905243.js"><link rel="prefetch" href="/assets/js/532.11aebf61.js"><link rel="prefetch" href="/assets/js/533.0cddb226.js"><link rel="prefetch" href="/assets/js/534.d1c9cc36.js"><link rel="prefetch" href="/assets/js/54.d1f9eec8.js"><link rel="prefetch" href="/assets/js/55.aa90e812.js"><link rel="prefetch" href="/assets/js/56.4d7f81f2.js"><link rel="prefetch" href="/assets/js/57.3c540e8d.js"><link rel="prefetch" href="/assets/js/58.fc1c23f2.js"><link rel="prefetch" href="/assets/js/59.c7a7a4c0.js"><link rel="prefetch" href="/assets/js/6.056886f1.js"><link rel="prefetch" href="/assets/js/60.40e590ae.js"><link rel="prefetch" href="/assets/js/61.e400b323.js"><link rel="prefetch" href="/assets/js/62.bbb30ef1.js"><link rel="prefetch" href="/assets/js/63.c31cd2bb.js"><link rel="prefetch" href="/assets/js/64.62321188.js"><link rel="prefetch" href="/assets/js/65.44adc2b3.js"><link rel="prefetch" href="/assets/js/66.b5740d4f.js"><link rel="prefetch" href="/assets/js/67.76c3624c.js"><link rel="prefetch" href="/assets/js/68.6dd982d4.js"><link rel="prefetch" href="/assets/js/69.eb1390ec.js"><link rel="prefetch" href="/assets/js/7.a96cecf9.js"><link rel="prefetch" href="/assets/js/70.8c882bdd.js"><link rel="prefetch" href="/assets/js/71.001c968a.js"><link rel="prefetch" href="/assets/js/72.ae4ca075.js"><link rel="prefetch" href="/assets/js/73.d6ae6a27.js"><link rel="prefetch" href="/assets/js/74.fba60e37.js"><link rel="prefetch" href="/assets/js/75.0b1bf7bf.js"><link rel="prefetch" href="/assets/js/76.ee19d90e.js"><link rel="prefetch" href="/assets/js/77.fe8ac5f0.js"><link rel="prefetch" href="/assets/js/78.ae09432e.js"><link rel="prefetch" href="/assets/js/79.c1b10e2d.js"><link rel="prefetch" href="/assets/js/80.ae809538.js"><link rel="prefetch" href="/assets/js/81.ca11b4c7.js"><link rel="prefetch" href="/assets/js/82.308b98e4.js"><link rel="prefetch" href="/assets/js/83.355d9dde.js"><link rel="prefetch" href="/assets/js/84.a2b61d48.js"><link rel="prefetch" href="/assets/js/85.cf992fda.js"><link rel="prefetch" href="/assets/js/86.f547c7ea.js"><link rel="prefetch" href="/assets/js/87.2b02746a.js"><link rel="prefetch" href="/assets/js/88.e939aad5.js"><link rel="prefetch" href="/assets/js/89.b000c42a.js"><link rel="prefetch" href="/assets/js/90.dadef001.js"><link rel="prefetch" href="/assets/js/91.c0fe2e32.js"><link rel="prefetch" href="/assets/js/92.e09650b9.js"><link rel="prefetch" href="/assets/js/93.427c7280.js"><link rel="prefetch" href="/assets/js/94.90fc5f58.js"><link rel="prefetch" href="/assets/js/95.13d42b3a.js"><link rel="prefetch" href="/assets/js/96.d0a2ea8c.js"><link rel="prefetch" href="/assets/js/97.cc9a0eda.js"><link rel="prefetch" href="/assets/js/98.3c9f1b7e.js"><link rel="prefetch" href="/assets/js/99.0420dcbc.js"><link rel="prefetch" href="/assets/js/vendors~docsearch.33b2b47d.js">
    <link rel="stylesheet" href="/assets/css/0.styles.40c15e22.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><img src="/logo.png" alt="鱼皮的编程宝典" class="logo"> <span class="site-name can-hide">鱼皮的编程宝典</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/学习路线/" class="nav-link">
  学习路线
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="自学之路" class="dropdown-title"><span class="title">自学之路</span> <span class="arrow down"></span></button> <button type="button" aria-label="自学之路" class="mobile-dropdown-title"><span class="title">自学之路</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/自学之路/#大学经历" class="nav-link">
  大学经历
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#求职经历" class="nav-link">
  求职经历
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#职场工作" class="nav-link">
  职场工作
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#创作经历" class="nav-link">
  创作经历
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#创业经历" class="nav-link">
  创业经历
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#生活日常" class="nav-link">
  生活日常
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="编程分享" class="dropdown-title"><span class="title">编程分享</span> <span class="arrow down"></span></button> <button type="button" aria-label="编程分享" class="mobile-dropdown-title"><span class="title">编程分享</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/编程分享/#入门必看-学习路线" class="nav-link">
  入门必看-学习路线
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#学习指南" class="nav-link">
  学习指南
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#开发经验" class="nav-link">
  开发经验
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#求职经验" class="nav-link">
  求职经验
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#职场经验" class="nav-link">
  职场经验
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#技术分享" class="nav-link">
  技术分享
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#实战教程" class="nav-link">
  实战教程
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#其他" class="nav-link">
  其他
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#📚-项目教程" class="nav-link">
  项目教程
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#个人作品" class="nav-link">
  个人作品
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#🎁-编程资源" class="nav-link">
  编程资源
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#🌐-科技科普" class="nav-link">
  科技科普
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="项目实战" class="dropdown-title"><span class="title">项目实战</span> <span class="arrow down"></span></button> <button type="button" aria-label="项目实战" class="mobile-dropdown-title"><span class="title">项目实战</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/项目实战/OJ 判题系统.html" class="nav-link">
  OJ 判题系统
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/智能 BI 平台.html" class="nav-link">
  智能 BI 平台
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/聚合搜索平台.html" class="nav-link">
  聚合搜索平台
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/API 开放平台.html" class="nav-link">
  API 开放平台
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/伙伴匹配系统.html" class="nav-link">
  伙伴匹配系统
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/用户中心项目.html" class="nav-link">
  用户中心项目
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/Java 后端万用项目模板.html" class="nav-link">
  Java 后端万用项目模板
</a></li></ul></div></div><div class="nav-item"><a href="/知识碎片/" class="nav-link">
  知识碎片
</a></div><div class="nav-item"><a href="/编程导航/" class="nav-link">
  🔥 编程导航
</a></div><div class="nav-item"><a href="/产品服务/" class="nav-link">
  产品服务
</a></div><div class="nav-item"><a href="/作者/" class="nav-link">
  作者
</a></div> <a href="https://github.com/liyupi/codefather" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/学习路线/" class="nav-link">
  学习路线
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="自学之路" class="dropdown-title"><span class="title">自学之路</span> <span class="arrow down"></span></button> <button type="button" aria-label="自学之路" class="mobile-dropdown-title"><span class="title">自学之路</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/自学之路/#大学经历" class="nav-link">
  大学经历
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#求职经历" class="nav-link">
  求职经历
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#职场工作" class="nav-link">
  职场工作
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#创作经历" class="nav-link">
  创作经历
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#创业经历" class="nav-link">
  创业经历
</a></li><li class="dropdown-item"><!----> <a href="/自学之路/#生活日常" class="nav-link">
  生活日常
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="编程分享" class="dropdown-title"><span class="title">编程分享</span> <span class="arrow down"></span></button> <button type="button" aria-label="编程分享" class="mobile-dropdown-title"><span class="title">编程分享</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/编程分享/#入门必看-学习路线" class="nav-link">
  入门必看-学习路线
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#学习指南" class="nav-link">
  学习指南
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#开发经验" class="nav-link">
  开发经验
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#求职经验" class="nav-link">
  求职经验
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#职场经验" class="nav-link">
  职场经验
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#技术分享" class="nav-link">
  技术分享
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#实战教程" class="nav-link">
  实战教程
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#其他" class="nav-link">
  其他
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#📚-项目教程" class="nav-link">
  项目教程
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#个人作品" class="nav-link">
  个人作品
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#🎁-编程资源" class="nav-link">
  编程资源
</a></li><li class="dropdown-item"><!----> <a href="/编程分享/#🌐-科技科普" class="nav-link">
  科技科普
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="项目实战" class="dropdown-title"><span class="title">项目实战</span> <span class="arrow down"></span></button> <button type="button" aria-label="项目实战" class="mobile-dropdown-title"><span class="title">项目实战</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/项目实战/OJ 判题系统.html" class="nav-link">
  OJ 判题系统
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/智能 BI 平台.html" class="nav-link">
  智能 BI 平台
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/聚合搜索平台.html" class="nav-link">
  聚合搜索平台
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/API 开放平台.html" class="nav-link">
  API 开放平台
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/伙伴匹配系统.html" class="nav-link">
  伙伴匹配系统
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/用户中心项目.html" class="nav-link">
  用户中心项目
</a></li><li class="dropdown-item"><!----> <a href="/项目实战/Java 后端万用项目模板.html" class="nav-link">
  Java 后端万用项目模板
</a></li></ul></div></div><div class="nav-item"><a href="/知识碎片/" class="nav-link">
  知识碎片
</a></div><div class="nav-item"><a href="/编程导航/" class="nav-link">
  🔥 编程导航
</a></div><div class="nav-item"><a href="/产品服务/" class="nav-link">
  产品服务
</a></div><div class="nav-item"><a href="/作者/" class="nav-link">
  作者
</a></div> <a href="https://github.com/liyupi/codefather" target="_blank" rel="noopener noreferrer" class="repo-link">
    GitHub
    <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav>  <ul class="sidebar-links"><li><a href="/%E7%BC%96%E7%A8%8B%E5%88%86%E4%BA%AB/" class="sidebar-link">入门必看 - 学习路线</a></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>入门必看-学习路线</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>学习指南</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>开发经验</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>求职经验</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>职场经验</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>技术分享</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>实战教程</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>项目教程</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>编程资源</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>科技科普</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>其他</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <main class="page"> <div class="content"><div style="width:100%"><div class="theme-default-content custom-content content__default"><h1 id="除了-mysql-这些数据库你都认识么"><a href="#除了-mysql-这些数据库你都认识么" class="header-anchor">#</a> 除了 MySQL，这些数据库你都认识么？</h1> <blockquote><p>本文作者：<a href="https://yuyuanweb.feishu.cn/wiki/Abldw5WkjidySxkKxU2cQdAtnah" target="_blank" rel="noopener noreferrer">程序员鱼皮<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <p>本站地址：<a href="https://codefather.cn" target="_blank" rel="noopener noreferrer">https://codefather.cn<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p></blockquote> <p>大家好，我是鱼皮，今天和大家聊聊数据库。</p> <p>什么是数据库？</p> <p>这个问题相信对学编程的朋友们来说过于简单了，大家想必都是增删改查的好手。</p> <p>但如果让你说出 10 种不同类型的数据库，阁下该如何应对？</p> <p>这篇文章，是对数据库技术的一个小科普，希望能帮大家了解到更多元化的数据库，便于拓宽学习思路和项目的技术选型。</p> <h2 id="关系型数据库"><a href="#关系型数据库" class="header-anchor">#</a> 关系型数据库</h2> <p>首先是我们接触最多的、也是入门后端必学的 <strong>关系型数据库</strong> 。</p> <p>在关系型数据库中，数据以 <strong>表</strong> 的形式进行组织和存储，每个表就像一个 Excel 表格，包含多个 <strong>行</strong> 和多个 <strong>列</strong> 。</p> <p>就比如我们经典的学生管理系统，把学生信息存储到关系型数据库中，结构大概是这样的：</p> <table><thead><tr><th style="text-align:left;">学号</th> <th style="text-align:left;">学生姓名</th> <th style="text-align:left;">所属班级号</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">小李</td> <td style="text-align:left;">1</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">小鱼</td> <td style="text-align:left;">2</td></tr> <tr><td style="text-align:left;">3</td> <td style="text-align:left;">小皮</td> <td style="text-align:left;">3</td></tr></tbody></table> <p>上述学生表格中，每一行代表一个学生的信息，每一列代表学生的一个属性。我们可以使用结构化查询语言 SQL 来对关系型数据库表的数据进行灵活地查询、选择、过滤等。</p> <p>而关系型数据库最大的特点，就是表和表之间可以 <strong>存在关系</strong> 。比如学生管理系统中还可以有班级表，结构如下：</p> <table><thead><tr><th style="text-align:left;">班号</th> <th style="text-align:left;">班级名称</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">快乐班</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">泰酷班</td></tr> <tr><td style="text-align:left;">3</td> <td style="text-align:left;">躺平班</td></tr></tbody></table> <p>那如果我想知道某个学生所属的班级信息，只需要在查询时将学生表的 <strong>所属班级号</strong> 和班级表的 <strong>班号</strong> 进行关联，而不用把所有表格的列存储在一起，非常灵活。</p> <p>通过 SQL 可以连接查询多张表，得到下面的查询结果：</p> <table><thead><tr><th style="text-align:left;">学号</th> <th style="text-align:left;">学生姓名</th> <th style="text-align:left;">所属班级号</th> <th style="text-align:left;">班级名称</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">小李</td> <td style="text-align:left;">1</td> <td style="text-align:left;">快乐班</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">小鱼</td> <td style="text-align:left;">2</td> <td style="text-align:left;">泰酷班</td></tr> <tr><td style="text-align:left;">3</td> <td style="text-align:left;">小皮</td> <td style="text-align:left;">3</td> <td style="text-align:left;">躺平班</td></tr></tbody></table> <p>除了查询灵活、数据表间存在关系外，关系型数据库还具有很多其他的优点。</p> <p>比较重要的是 <strong>数据一致性</strong> ，关系型数据库遵循 ACID 原则（原子性、一致性、隔离性和持久性），支持事务，可以保证多个操作同时进行时，数据的状态保持一致。比如 A 给 B 转账，A 扣钱 的同时 B 也会加钱，不会出现 A 扣了钱 B 却没收到钱的情况。</p> <p>兼顾查询的灵活和写入的准确性，使得关系型数据库几乎可以被应用于任何项目中！比如 CRM（客户关系管理）和 HRM（人力资源管理）等各类管理系统、数据分析系统、金融银行系统等。</p> <p>比较经典的关系型数据库产品有 MySQL、Oracle、PostgreSQL、Microsoft SQL Server 等。其中，MySQL 由于开源又易学，已经成为后端开发同学必学的数据库技术。</p> <p>关系型数据库的底层核心实现是 <strong>基于关系模型的数学理论</strong> ，最常见的实现方式是使用 B+ 树来存储索引结构，基于其平衡性，能够在存储大量数据时保持高效的查询性能，并且兼顾增删改操作的性能。</p> <p><img alt="" data-src="https://pic.yupi.icu/5563/202311080912367.png" loading="lazy" class="lazy"></p> <p>对于大多数项目，用 MySQL 等关系型数据库来存储数据就足够了。但关系型数据库不是银弹！在某些场景下，比如要存储的数据间没有关系时，它并不是最佳的选择。</p> <p>举个例子，当我们要写一篇文章，没有必要把数据存储到 Excel 表格里，可能直接将单篇文本放到 Word 里会更方便阅读和修改。</p> <p>这个时候，我们就需要与之互补的 <strong>非关系型数据库</strong> 。</p> <h2 id="非关系型数据库"><a href="#非关系型数据库" class="header-anchor">#</a> 非关系型数据库</h2> <p>非关系型数据库又叫 NoSQL。最简单的理解方式：关系型数据库适用于存储相互之间 <strong>存在关系的数据表</strong> ，那么非关系型数据库适用于关系不强的、结构相对灵活的、需要被快速访问的数据，比如字符串、JSON 等。</p> <p>实际项目开发中，最常用的非关系型数据库当属 KV 数据库。</p> <p>KV 即 Key-Value，数据是以 <strong>键值对</strong> 的方式存储在数据库中的。可以理解为一个 HashMap，数据库中存储的每个键都 <strong>唯一对应</strong> 一个值。键和值都可以是任意类型的数据，例如字符串、数字、数组等，非常灵活。</p> <p>比如存储每位用户的个人信息，结构大概是这样的：</p> <p><img alt="" data-src="https://pic.yupi.icu/5563/202311080912772.png" loading="lazy" class="lazy"></p> <p>由于 KV 存储的结构简单清晰，我们能够很轻松地根据某个键查找出对应的值，无论是读写数据性能都非常高。</p> <p>此外，KV 数据库还具备良好的可扩展性，由于数据间不存在直接关联，我们可以把键值对放到多个机器上存储，通过数据分片、负载均衡等策略来支持海量数据的高并发访问。</p> <p>由于高性能和高可扩展性，KV 数据库被广泛应用于缓存、分布式会话、分布式锁、实时统计等场景。</p> <p>最经典的 KV 数据库当属 Redis 了，它是开源的、基于内存的、高性能的数据库，不仅支持丰富的数据类型和功能，还有持久化等重要特性，也是后端同学必学的技术。其他的常用 KV 数据库有 LevelDB、RocksDB、Apache Cassandra 等。</p> <p>KV 数据库的底层实现比较灵活，常见的实现方式是使用哈希表来存储键值对。不同类型的值对应的实现方式也不同，比如 Redis 的字符串存储采用简单动态字符串（SDS）实现。</p> <p><img alt="" data-src="https://pic.yupi.icu/5563/202311080912920.png" loading="lazy" class="lazy"></p> <h2 id="解决特定问题的数据库"><a href="#解决特定问题的数据库" class="header-anchor">#</a> 解决特定问题的数据库</h2> <p>相信很多同学对数据库的印象就停留在 MySQL 和 Redis。的确，以上两类数据库几乎已经可以解决所有问题！</p> <p>但是，未必是最适合的。</p> <p>就像你完全可以用电脑自带的记事本软件来查看和编辑 HTML 网页文件，但是往往会选择一个更专业的开发工具来替代它。</p> <p>数据库也是一样，除了传统的关系和非关系型数据库之外，还有很多用于解决特定问题的数据库。它们往往针对特定的数据结构和应用场景进行了专门的优化和设计，能够提供更高效快捷的数据查询和存储，满足特定领域的需求。</p> <p>比如下面 8 种数据库：</p> <h3 id="搜索引擎数据库"><a href="#搜索引擎数据库" class="header-anchor">#</a> 搜索引擎数据库</h3> <p>顾名思义，搜索引擎数据库是为了实现搜索引擎功能的数据库。</p> <p>它适用于存储和管理大量的文本内容数据，并提供更快速、准确、灵活的全文检索功能。</p> <p>比如想要让用户更轻松地在你的博客内搜索文章，就可以使用搜索引擎数据库。</p> <p>为什么它能做到更快更灵活的搜索呢？这是因为在搜索引擎数据库中，数据一般是以 <strong>倒排索引</strong> 的方式存储的。</p> <p>倒排索引和传统的关系表有什么区别呢？</p> <p>以存储博客文档为例，传统的关系型数据库存储结构是：</p> <table><thead><tr><th style="text-align:left;">文档 id</th> <th style="text-align:left;">文档内容</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">感谢关注鱼皮</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">鱼皮是一名程序员</td></tr> <tr><td style="text-align:left;">3</td> <td style="text-align:left;">感谢关注屑老板不破产</td></tr></tbody></table> <p>我们能够根据 id 来查找到对应的单篇文档，也可以通过搜索精确的关键词，来查找到多篇文档。</p> <p>比如搜索 “鱼皮”，能搜出文档 1、2。</p> <p>但是，如果你搜索 “鱼皮程序员”，是无法得到搜索结果的，因为没有任何一个文档的内容，完全包含 “鱼皮程序员” 这个词（文档内容 2 只有 “鱼皮”、“程序员” 这两个词）。</p> <p>而在搜索引擎数据库中，首先会将文档内容按照单词进行分割，也就是 <strong>分词</strong> 。然后再构建单词到文档 id 的映射，示例结构如下：</p> <table><thead><tr><th style="text-align:left;">单词</th> <th style="text-align:left;">文档 id</th></tr></thead> <tbody><tr><td style="text-align:left;">感谢</td> <td style="text-align:left;">1, 3</td></tr> <tr><td style="text-align:left;">关注</td> <td style="text-align:left;">1, 3</td></tr> <tr><td style="text-align:left;">鱼皮</td> <td style="text-align:left;">1, 2</td></tr> <tr><td style="text-align:left;">程序员</td> <td style="text-align:left;">2</td></tr></tbody></table> <p>有了上述的倒排索引，当用户搜索 “鱼皮程序员” 时，搜索引擎数据库会先对搜索词进行分词，得到 “鱼皮” 和 “程序员”，然后根据这两个词汇就能找到文档 id 1、2 了。不用再去遍历表内所有的数据，实现了更灵活、快速的 <strong>模糊搜索</strong> 。</p> <p>此外，搜索引擎数据库还支持 <strong>相关性排序</strong> ，能够根据用户的搜索词对所有搜索结果进行打分，把最接近的文档排到最上面。</p> <p>主流的搜索引擎数据库技术有 Elasticsearch、Apache Solr、Apache Lucene 等，一般更建议大家学习 Elasticsearch，这玩意更新迭代地老快了。</p> <h3 id="文档数据库"><a href="#文档数据库" class="header-anchor">#</a> 文档数据库</h3> <p>顾名思义，文档数据库适用于存储和管理 <strong>半结构化的</strong> 文档数据，比如存储 JSON 格式。</p> <p>相比于关系型数据库中明确定义的表格行列，文档数据库的数据结构是类似于文档的层次化结构，每个文档都是独立的，可以包含多个不同类型和格式的数据。</p> <p>比如存储博客文章，示例结构如下：</p> <table><thead><tr><th style="text-align:left;">文档 ID</th> <th style="text-align:left;">文档数据</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">{&quot;_id&quot;: 1, &quot;title&quot;: &quot;文章标题1&quot;, &quot;content&quot;: &quot;这是文章1的内容&quot;}</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">{&quot;_id&quot;: 2, &quot;title&quot;: &quot;文章标题2&quot;, &quot;author&quot;: &quot;程序员鱼皮&quot;}</td></tr></tbody></table> <p>当我们要给某个文档新增一个字段时，不需要像关系型数据库一样改变表结构，非常灵活！</p> <p>除了灵活之外，文档数据库也有很高的可扩展性，适用于内容管理系统（比如博客）、文档协同编辑系统等。</p> <p>个人比较推荐学习的文档数据库是 MongoDB，入门难度极低，对前端同学也很友好。当然，Couchbase 也是不错的。</p> <h3 id="时序数据库"><a href="#时序数据库" class="header-anchor">#</a> 时序数据库</h3> <p>时序数据库是一种专门用于高效存储和处理 <strong>时间序列</strong> 的数据库系统。</p> <p>时间序列是指以时间作为主要维度的数据序列，即每个数据单元都包含 <strong>时间戳</strong> 。</p> <p>举个例子，在实时温度监测系统中，我们需要 <strong>每分钟连续</strong> 收集并观察当前的温度，数据结构示例如下：</p> <table><thead><tr><th style="text-align:left;">时间戳</th> <th style="text-align:left;">设备ID</th> <th style="text-align:left;">温度值</th></tr></thead> <tbody><tr><td style="text-align:left;">2023-07-01 10:00</td> <td style="text-align:left;">Device001</td> <td style="text-align:left;">25.5</td></tr> <tr><td style="text-align:left;">2023-07-01 10:01</td> <td style="text-align:left;">Device001</td> <td style="text-align:left;">25.7</td></tr> <tr><td style="text-align:left;">2023-07-01 10:02</td> <td style="text-align:left;">Device001</td> <td style="text-align:left;">25.8</td></tr> <tr><td style="text-align:left;">2023-07-01 10:03</td> <td style="text-align:left;">Device001</td> <td style="text-align:left;">26.2</td></tr> <tr><td style="text-align:left;">2023-07-01 10:04</td> <td style="text-align:left;">Device001</td> <td style="text-align:left;">26.5</td></tr> <tr><td style="text-align:left;">2023-07-01 10:05</td> <td style="text-align:left;">Device001</td> <td style="text-align:left;">26.3</td></tr></tbody></table> <p>有了这些数据，我们就能够按照时间范围进行高效查询、聚合分析、数据可视化。</p> <p>因此，时序数据库非常适用于物联网（比如传感器数据）、日志监控、金融交易数据分析等场景。</p> <p>主流的时序数据库技术有 InfluxDB、TimescaleDB 等。一般情况下，建议将时序数据库配合 Grafana 监控看板一起使用，实现数据存储 + 快速可视化。</p> <p><img alt="" data-src="https://pic.yupi.icu/5563/202311080912716.png" loading="lazy" class="lazy"></p> <p>不同时序数据库底层的存储方式也不同，我们可以简单理解为，时序数据库会根据 <strong>时间</strong> 字段构建索引，查询时通过索引去定位实际数据。比如 InfluxDB 使用 TSM（Time-Structured Merge Tree）作为存储引擎，底层使用 B+ 树来存储时间索引。</p> <h3 id="向量数据库"><a href="#向量数据库" class="header-anchor">#</a> 向量数据库</h3> <p>向量数据库是专门用于存储和处理 <strong>高维向量数据</strong> 的数据库系统。</p> <p>什么是向量？每个向量可以表示一个实体，并且包含多个维度的数值。</p> <p>举个例子，在人脸识别系统中，我们可以通过人脸的 <strong>特征</strong> 来判断是否为熟人。每张人脸图像，都对应一个向量；每个人脸向量有可能包含成百上千个特征，比如鼻子大小、眼睛大小等，每个特征就是一个维度。</p> <p>对应的数据结构示例如下：</p> <table><thead><tr><th style="text-align:left;">人脸 ID</th> <th style="text-align:left;">人脸特征向量</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">[0.1, 0.2, 0.3, ..., 0.5]</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">[0.1, 0.3, 0.2, ..., 0.4]</td></tr></tbody></table> <p>在上述表格中，人脸特征向量是一个浮点数数组。数组的每个下标就表示一个特征（维度），比如下标 0 的数值表示鼻子的大小，下标 1 的数值表示眼睛大小，以此类推。。。</p> <p>我们只需要对比向量，就能够判断出人脸的相似度。</p> <p>向量数据库能够高效存储多维向量数据、计算向量的相似度、并实现各种不同算法的相似性搜索，适用于图像识别、特征提取和匹配、推荐系统等场景。值得一提的是，AI 技术的发展也带来了一波向量数据库技术的热潮，可以利用向量数据库存储投喂给 AI 的训练 Embeddings 数据。</p> <p>主流的向量数据库技术有 Milvus、Pinecone、Faiss 等，有些数据库（比如 PostgreSQL）可能也支持存储向量类型的字段。</p> <p>关于向量数据库的底层实现，还是比较复杂的。类似于上面提到的时序数据库，向量数据库的实现关键也是索引的设计。常见的向量索引结构有倒排索引、KD 树、球树等，可以理解为对相似的向量数据进行了分组和编码，从而实现更快速地检索匹配相似向量。此外，向量数据库往往也会采用并行计算来加速处理。</p> <h3 id="空间数据库"><a href="#空间数据库" class="header-anchor">#</a> 空间数据库</h3> <p>空间数据库是专门用于存储和处理 <strong>地理空间数据</strong> 的数据库系统。</p> <p>地理空间数据是指基于地理 <strong>坐标系</strong> 的 <strong>几何对象</strong> ，比如某个物体所处的经纬度或三维坐标（点）、某个物体的轮廓（线）、某个物体的表面（面）等。</p> <p>举个例子，假如你想存储自己房间内每个物体的位置信息，对应的数据结构可能是：</p> <table><thead><tr><th style="text-align:left;">物体 ID</th> <th style="text-align:left;">X 坐标</th> <th style="text-align:left;">Y 坐标</th> <th style="text-align:left;">Z 坐标</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">2.5</td> <td style="text-align:left;">3.0</td> <td style="text-align:left;">1.8</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">1.0</td> <td style="text-align:left;">4.2</td> <td style="text-align:left;">2.3</td></tr> <tr><td style="text-align:left;">3</td> <td style="text-align:left;">3.7</td> <td style="text-align:left;">2.1</td> <td style="text-align:left;">1.5</td></tr></tbody></table> <p>使用空间数据库，能够高效地存储、查询和分析空间数据，比如计算两个空间是否相交、对路径进行规划、可视化地理空间等。</p> <p>空间数据库不仅是地理信息系统（GIS）的核心组件，还能用于实现位置导航、城市路面规划等场景。</p> <p>对于具体的空间数据库技术，我了解得不多，只知道可以用 PostGIS 插件来为 PostgreSQL 支持空间数据管理能力，朋友们可以帮忙补充下。</p> <p><img alt="" data-src="https://pic.yupi.icu/5563/202311080912370.png" loading="lazy" class="lazy"></p> <p>至于空间数据库的底层实现，最关键的部分依然是索引。常见的 <strong>空间索引</strong> 结构有 R 树、Quadtree 等，这些结构可以对空间数据进行划分、聚合和编码，从而加速空间范围的查询处理。此外，空间数据库涉及大量的空间分析算法，比如最近邻查询、空间关系查询等。时间有限，不做展开说明了。</p> <h3 id="图形数据库"><a href="#图形数据库" class="header-anchor">#</a> 图形数据库</h3> <p>图形数据库是专门用于存储和处理 <strong>图形结构数据</strong> 的数据库系统。</p> <p>注意，这里的图形可不是三角形、长方形，而是指 <strong>由节点和边构成</strong> 的图形结构。</p> <p>比如我们要存储一个朋友圈关系网（即 FoF：朋友的朋友），对应的图形可能是：</p> <p><img alt="" data-src="https://pic.yupi.icu/5563/202311080912919.png" loading="lazy" class="lazy"></p> <p>上图中，每个用户可以表示为一个节点，用户之间的好友关系可以表示为边。</p> <p>在图形数据库中，需要 2 个表格来存储。</p> <p>节点信息表：</p> <table><thead><tr><th style="text-align:left;">节点 id</th> <th style="text-align:left;">节点名</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">小王</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">小李</td></tr> <tr><td style="text-align:left;">3</td> <td style="text-align:left;">小刘</td></tr></tbody></table> <p>边信息表：</p> <table><thead><tr><th style="text-align:left;">边 id</th> <th style="text-align:left;">边类型</th> <th style="text-align:left;">起始节点</th> <th style="text-align:left;">结束节点</th></tr></thead> <tbody><tr><td style="text-align:left;">1</td> <td style="text-align:left;">好友</td> <td style="text-align:left;">1</td> <td style="text-align:left;">2</td></tr> <tr><td style="text-align:left;">2</td> <td style="text-align:left;">好友</td> <td style="text-align:left;">1</td> <td style="text-align:left;">3</td></tr></tbody></table> <p>通过存储这些节点和边的信息，图形数据库就能实现快速 <strong>查询及分析</strong> 朋友圈网中的用户关系，并且挖掘出用户的社交情况、和其他用户的隐藏关系等。</p> <p>由此，图形数据库非常适于构建社交网络关系图谱、推荐系统、知识图谱等。</p> <p>比较主流的图形数据库有 Neo4j、TigerGraph 等，都支持复杂的图形操作和算法、以及分布式扩展，能够通过并行计算加速图形处理。</p> <p>图形数据库的核心实现相信学过算法的朋友们并不陌生，主要是用了类似邻接表、邻接矩阵等方式实现节点和边数据的存储，并且通过构建图形索引进行加速。</p> <h3 id="列存数据库"><a href="#列存数据库" class="header-anchor">#</a> 列存数据库</h3> <p>这是一种 <strong>非常主流</strong> 的数据库！区别于传统的行式数据库，列存数据库以列作为基本的存储单位，把每列的数据存储在一起。</p> <p>拿鱼皮公司每天的收入来举个例子，传统的行式（关系型）数据库是这么存储的：</p> <table><thead><tr><th style="text-align:left;">日期</th> <th style="text-align:left;">销售额</th> <th style="text-align:left;">成本</th> <th style="text-align:left;">利润</th></tr></thead> <tbody><tr><td style="text-align:left;">2022-01-01</td> <td style="text-align:left;">500</td> <td style="text-align:left;">600</td> <td style="text-align:left;">-100</td></tr> <tr><td style="text-align:left;">2022-01-02</td> <td style="text-align:left;">280</td> <td style="text-align:left;">450</td> <td style="text-align:left;">-170</td></tr> <tr><td style="text-align:left;">2022-01-03</td> <td style="text-align:left;">290</td> <td style="text-align:left;">480</td> <td style="text-align:left;">-190</td></tr></tbody></table> <p>而在列存数据库中，底层大概是这么存储的，相当于对矩阵做了一次转置：</p> <table><thead><tr><th style="text-align:left;">日期</th> <th style="text-align:left;">2022-01-01</th> <th style="text-align:left;">2022-01-02</th> <th style="text-align:left;">2022-01-03</th></tr></thead> <tbody><tr><td style="text-align:left;">销售额</td> <td style="text-align:left;">500</td> <td style="text-align:left;">280</td> <td style="text-align:left;">290</td></tr> <tr><td style="text-align:left;">成本</td> <td style="text-align:left;">600</td> <td style="text-align:left;">450</td> <td style="text-align:left;">480</td></tr> <tr><td style="text-align:left;">利润</td> <td style="text-align:left;">-100</td> <td style="text-align:left;">-170</td> <td style="text-align:left;">-190</td></tr></tbody></table> <p>这样一来，如果我们要统计这几天公司的总利润，不需要依次读取每一行的数据，直接 <strong>读取所需</strong> 的利润那一列进行计算即可，从而提高了数据分析和聚合操作的效率。</p> <p>此外，从计算机底层来分析，把相同类型的数据在同一列中连续存储，可以实现更好的数据压缩效果、节约空间。</p> <p>因此，列存数据库适用于实时数据分析、OLAP、大规模数据仓库等场景。</p> <p>比较主流的列存数据库技术有 Apache HBase、ClickHouse、Druid 等，都是大数据方向同学的必修课。</p> <p><img alt="" data-src="https://pic.yupi.icu/5563/202311080912812.png" loading="lazy" class="lazy">ClickHouse 官方演示</p> <h3 id="多模数据库"><a href="#多模数据库" class="header-anchor">#</a> 多模数据库</h3> <p>最后要讲的数据库也最特别，区别于上面所有存储单一数据模型的数据库，多模数据库能够 <strong>同时存储处理多种不同类型的数据</strong> ，比如关系型数据、文档数据、图形数据等，非常灵活。</p> <p>就拿大家学编程时最常做的电商系统来举例。如果没有多模数据库，你要用关系型数据库来存储商品简略信息（比如商品名称、价格），要用文档数据库来存储可能长达几十页的商品详情，要用图数据库来存储商品推荐关系。每次看数据库信息时，要分别到三个数据库中查看。</p> <p>如果使用多模数据库，可以直接在同一个数据库里统一存储和管理不同类型的数据，非常方便。</p> <p>此外，多模数据库还支持事务，能够更轻松地实现数据的一致性和完整性，不需要手动实现跨库事务、跨库数据同步等等。</p> <p>比较常用的多模态数据库技术有 ArangoDB、OrientDB 等，不过一般情况下，我们在开发中也很少会用到这种数据库，感兴趣的话再学习即可。</p> <hr> <p>OK，不知不觉竟然写了近 6000 字！希望这篇文章对大家有收获吧，不过我只列举了应用相对较多的数据库类型，大家如果听说过其他的数据库，欢迎评论区留言分享~</p></div> <footer class="page-edit" style="margin:0;"><div class="edit-link"><a href="https://github.com/liyupi/codefather/edit/master/编程分享/技术分享/技术知识/除了 MySQL，这些数据库你都认识么？.md" target="_blank" rel="noopener noreferrer">完善页面</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <div class="last-updated"><span class="prefix">最近更新:</span> <span class="time">11/11/2023, 8:17:47 PM</span></div></footer> <!----></div> <div class="toc-container-sidebar"><div class="pos-box"><div class="icon-arrow"></div> <div class="scroll-box" style="max-height:86vh"><div style="font-weight:bold;">除了 MySQL，这些数据库你都认识么？</div> <hr> <div class="toc-box"><ul class="toc-sidebar-links"><li><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#关系型数据库" class="toc-sidebar-link">关系型数据库</a><ul class="toc-sidebar-sub-headers"></ul></li><li><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#非关系型数据库" class="toc-sidebar-link">非关系型数据库</a><ul class="toc-sidebar-sub-headers"></ul></li><li><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#解决特定问题的数据库" class="toc-sidebar-link">解决特定问题的数据库</a><ul class="toc-sidebar-sub-headers"><li class="toc-sidebar-sub-header"><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#搜索引擎数据库" class="toc-sidebar-link">搜索引擎数据库</a></li><li class="toc-sidebar-sub-header"><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#文档数据库" class="toc-sidebar-link">文档数据库</a></li><li class="toc-sidebar-sub-header"><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#时序数据库" class="toc-sidebar-link">时序数据库</a></li><li class="toc-sidebar-sub-header"><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#向量数据库" class="toc-sidebar-link">向量数据库</a></li><li class="toc-sidebar-sub-header"><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#空间数据库" class="toc-sidebar-link">空间数据库</a></li><li class="toc-sidebar-sub-header"><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#图形数据库" class="toc-sidebar-link">图形数据库</a></li><li class="toc-sidebar-sub-header"><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#列存数据库" class="toc-sidebar-link">列存数据库</a></li><li class="toc-sidebar-sub-header"><a href="/%E9%99%A4%E4%BA%86-mysql-%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%A0%E9%83%BD%E8%AE%A4%E8%AF%86%E4%B9%88/#多模数据库" class="toc-sidebar-link">多模数据库</a></li></ul></li></ul></div></div></div></div></div>  <main class="footer"> <div class="copy-right"><span class="name"> 编程导航   |     </span> <a target="_blank" rel="noreferrer">
          
        </a></div></main></main> <aside class="page-sidebar"> <div class="page-side-toolbar"></div>  </aside></div><div class="global-ui"><!----></div></div>
    <script src="/assets/js/app.12ab4756.js" defer></script><script src="/assets/js/2.fd06b53e.js" defer></script><script src="/assets/js/287.7613e62f.js" defer></script>
  </body>
</html>
